c linked list

105

#include<stdio.h>
#include<stdlib.h>
void insertAtBeginning(int);
void insertAtEnd(int);
void insertBetween(int,int,int);
void display();
void removeBeginning();
void removeEnd();
void removenode(int);
struct Node
{
   int data;
   struct Node *next;
}*head = NULL;
int main()
{
   int opt,value,opt1,val1,val2;
 while(1)
 {
   mainmenu : printf("\n\n MENU \n1. Insert\n2. Display\n3. Delete\n4. Exit\nEnter your choice: ");
   scanf("%d",&opt);
   switch(opt)
   {
      case 1:   printf("Enter the value to be insert: ");
                scanf("%d",&value);
        while(1)
        {
                printf("Where you want to insert: \n1. At Beginning\n2. At End\n3. Between\nEnter your choice: ");
                scanf("%d",&opt1);
                switch(opt1)
                {
                   case 1: insertAtBeginning(value);
                                   break; 
                   case 2: insertAtEnd(value);
                                   break;
                   case 3: printf("Enter the two values where you want to insert: ");
                                   scanf("%d%d",&val1,&val2);
                                   insertBetween(value,val1,val2);
                                break;
                                
                  /* default:   printf("\nWrong InputTry again");*/
                }
        goto mainmenu;
        }
        break;
                
      case 2:   display();
                break;
      case 3:   printf("How do you want to Delete: \n1. From Beginning\n2. From End\n3. given_node\nEnter your choice: ");
                scanf("%d",&opt1);
                switch(opt1)
                {
                   case 1:      removeBeginning();
                                break;
                   case 2:      removeEnd(value);
                                break;
                   case 3:      printf("Enter the value which you want to delete: ");
                                scanf("%d",&val2);
                                removenode(val2);
                                break;
                   default:     printf("\nWrong Input!! Try again!!!\n\n");
                                goto mainmenu;
                }
                break;
      case 4:   exit(0);
      default: printf("\nWrong input!!! Try again!!\n\n");
   }
   }
}

void insertAtBeginning(int value)
{
   struct Node *newNode;
   newNode = (struct Node*)malloc(sizeof(struct Node));
   newNode->data = value;
   if(head == NULL)
   {
      newNode->next = NULL;
      head = newNode;
   }
   else
   {
      newNode->next = head;
      head = newNode;
   }
   printf("\nOne node inserted!!!\n");
}
void insertAtEnd(int value)
{
   struct Node *newNode;
   newNode = (struct Node*)malloc(sizeof(struct Node));
   newNode->data = value;
   newNode->next = NULL;
   if(head == NULL)
        head = newNode;
   else
   {
      struct Node *temp = head;
      while(temp->next != NULL)
        temp = temp->next;
      temp->next = newNode;
   }
   printf("\nOne node inserted!!!\n");
}
void insertBetween(int value, int loc1, int loc2)
{
   struct Node *newNode;
   newNode = (struct Node*)malloc(sizeof(struct Node));
   newNode->data = value;
   if(head == NULL)
   {
      newNode->next = NULL;
      head = newNode;
   }
   else
   {
      struct Node *temp = head;
      while(temp->data != loc1 && temp->data != loc2)
        temp = temp->next;
      newNode->next = temp->next;
      temp->next = newNode;
   }
   printf("\nOne node inserted!!!\n");
}

void removeBeginning()
{
   if(head == NULL)
        printf("\n\nList is Empty!!!");
   else
   {
      struct Node *temp = head;
      if(head->next == NULL)
      {
         head = NULL;
         free(temp);
      }
      else
      {
        head = temp->next;
        free(temp);
        printf("\nOne node deleted!!!\n\n");
      }
   }
}
void removeEnd()
{
   if(head == NULL)
   {
      printf("\nList is Empty!!!\n");
   }
   else
   {
      struct Node *temp1 = head,*temp2;
      if(head->next == NULL)
        head = NULL;
      else
      {
         while(temp1->next != NULL)
         {
            temp2 = temp1;
            temp1 = temp1->next;
         }
         temp2->next = NULL;
      }
      free(temp1);
      printf("\nOne node deleted!!!\n\n");
   }
}
void removenode(int delValue)
{
   struct Node *temp1 = head, *temp2;
   while(temp1->data != delValue)
   {
     if(temp1 -> next == NULL){
        printf("\nGiven node not found in the list!!!");
     }
     temp2 = temp1;
     temp1 = temp1 -> next;
   }
   temp2 -> next = temp1 -> next;
   free(temp1);
   printf("\nOne node deleted!!!\n\n");
 }
void display()
{
   if(head == NULL)
   {
      printf("\nList is Empty\n");
   }
   else
   {
      struct Node *temp = head;
      printf("\n\nList elements are - \n");
      while(temp->next != NULL)
      {
         printf("%d --->",temp->data);
         temp = temp->next;
      }
      printf("%d --->NULL",temp->data);
   }
}
typedef struct node{
    int value; //this is the value the node stores
    struct node *next; //this is the node the current node points to. this is how the nodes link
}node;

node *createNode(int val){
    node *newNode = malloc(sizeof(node));
    newNode->value = val;
    newNode->next = NULL;
    return newNode;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0
typedef int BOOL;

/* a set of routines to illustrate insertion into, and deletion from, a linked
list using `traditional' single-level pointer techniques. The routines for 
deleting a list element, and for inserting at the front of a list are 
adapted from Kernighan and Pike's "The Practice of Programming"  pp.46 et 
seq. (Addison-Wesley 1999). The elements of the list are of type THING 
where each THING is a structure in which the `item' field holds a 
string and the `next' field holds a pointer to the next THING on the list. 

The techniques for adding a THING before the start of a list, or after the 
end of a list, are two special cases that are straightforward enough. 
However if the list elements are to be kept ordered alphabetically (say)  
the insertion of a new element needs great care to ensure that the 
NULL end-of-list marker does not get dereferenced.  

In summary the routines should be robust against:

 1) inserting/deleting to/from an empty list
 2) inserting/deleting to/from a single-element list
 3) inserting/deleting at the end of a list
 4) inserting/deleting at the front of a list - with updating of the 
    pointer to the  list head
 
The general routine `addmiddle', supplied below, is general purpose but 
it calls on 'addfront' and 'addend' in specific special cases. Note 
carefully that it does allow for duplicate list elements. 
Exercise: modify `addmiddle so that this duplication is NOT allowed.
 */


typedef struct _thing 
{ 
	char *item;
	struct _thing *next;
} THING;

THING *start = NULL;

// create new list element of type THING from the supplied text string
THING *newelement(char *text)
{
	THING *newp;
	newp = (THING *) malloc (sizeof(THING));
	newp->item = (char *)malloc(strlen(text) + 1);
        strcpy(newp->item, text);
        newp -> next = NULL;
	return newp;
}

// delelement: remove from list the first instance of an element 
// containing a given text string
// NOTE!! delete requests for elements not in the list are silently ignored 
THING *delelement(THING *head, char *text)
{
	THING *p, *prev;
	prev = NULL;
	for (p = head; p != NULL; p = p -> next) {
            if (strcmp(text, p -> item) == 0) {
		if(prev == NULL)
		   head = p-> next;
		else
		   prev -> next = p -> next;
		free(p -> item); //free off the the string field
		free(p);	// remove rest of THING
		return head;
	   }
	   prev = p;	
	}
}

/* addfront: add new THING to front of list  */
/* example usage: start = (addfront(start, newelement("burgers")); */

THING *addfront(THING *head, THING *newp)
{
	newp -> next = head;
	return newp;
}

/* addend: add new THING to the end of a list  */
/* usage example: start = (addend(start, newelement("wine")); */

THING *addend (THING *head, THING *newp)
{
	THING *p2; 	
	if (head == NULL)
		return newp;
// now find the end of list
	for (p2 = head; p2 -> next != NULL; p2 = p2 -> next)
		;
	p2 -> next = newp;
	return head;
}

// add element into middle of a list of THINGs based on alphabetical order 
// of the `item' strings within the THING structures 
THING *addmiddle (THING *head, THING *newp)
{
	BOOL found = FALSE;
	THING *p1, *p2; 	
	if (head == NULL) { //special case
//		printf("initial list was NULL\n");
		head = addfront(head, newp);
		return head;
	}
// Main loop. Use p2 to remember previous p1
	p2 = p1 = head ; 
	while (!found) {
  		if (found = strcmp(p1 -> item, newp -> item) >= 1) {
			if (p1 == head) { 
//					printf("adding at head\n");
					head = addfront(head, newp); 
					return(head);
		        }
			else { //general case - insert the item
//        		        printf("General case entered\n");
				p2 -> next = newp;;
				newp -> next = p1;
				return head;
	  		}
	  	}
// match not found before end of list so insert at end 
	if  (p1 -> next == NULL) {
		head = addend(head, newp); 
		return (head);
	}
// go round while loop one more time
	p2 = p1; p1 = p1 -> next; 
	
	}// end of while 
	
}



void printlist(THING **head)
// this routine uses pointer-to-pointer techniques :-)
{
	THING **tracer = head;
	while ((*tracer) != NULL) {
		printf("%s \n",(*tracer)->item);
		tracer = &(*tracer)->next;
	}
}


int main(int argc, char **argv)
{
	start = addmiddle(start, newelement("chips")); 
	start = addmiddle(start, newelement("wine")); 
	start = addmiddle(start, newelement("beer")); 
	start = addmiddle(start, newelement("pizza")); 
	start = addmiddle(start, newelement("zucchini"));
	start = addmiddle(start, newelement("burgers"));
	start = addmiddle(start, newelement("burgers"));
	start = addmiddle(start, newelement("slaw"));
	printf("\nINITIAL LIST\n");
	printlist (&start);
	delelement(start, "pizza");
	delelement(start, "zucchini");
	delelement(start, "burgers");
	printf("\nALTERED LIST\n");
	printlist(&start);
	
}
#include<stdio.h>
#include<stdlib.h>

int main()
{
  //node structure
  struct node
  {
      int data;
      struct node *next;
  };

  //declaring nodes
  struct node *head,*middle,*last;

  //allocating memory for each node
  head   = malloc(sizeof(struct node));
  middle = malloc(sizeof(struct node));
  last   = malloc(sizeof(struct node));

  //assigning values to each node
  head->data   = 10;
  middle->data = 20;
  last->data   = 30;

  //connecting each nodes. head->middle->last
  head->next   = middle;
  middle->next = last;
  last->next   = NULL;

  //temp is a reference for head pointer.
  struct node *temp = head;

  //till the node becomes null, printing each nodes data
  while(temp != NULL)
  {
      printf("%d->",temp->data);
      temp = temp->next;
  }
  printf("NULL");

  return 0;
}

Comments

Submit
0 Comments

More Questions

boolean in crandom number c ModuleNotFoundError: No module named cv2
check dns server in linuxread files in c how to get user input in c
print boolean value in clatex font sizes see if two strings are equal in C
how to download file in powershellprintf with bool invoke-webrequest download file
write in file in cmongodb delete all documents how to genrate a random number in C
how to print boolean in csleep in c programming install zoom on ubuntu
c concatenate stringstake array as input in c install gitk mac
remove element from np arrayprint an array in c C static libraries (creating object files)
exponentials in cC++ initalize int16_t value script hack blox fruti
pointer operatorcheck command line input is a number in c what is covert channel
sqlserver insert with set identity-usr-bin-env: python-r: No such file or directory linear search program in c
Uri-beecrowd problem no - 1099 solution in Cc addition The fscanf and fprintf functions
function that reverses the content of an array of integers.how to search in a file in c Couldnt create temporary file to work with
WARNING: QA Issue: bgslibrary-dev rdepends on libopencv-imgproc, but it isnt a build dependency, missing opencv in DEPENDS or PACKAGECONFIG [build-deps]reading arrays from stdin c add a item to cart woocomerce with quantity
Using PostgreSQL array to store many-to-many relationship using sqlalchemylistas enlazadas- linked lists binary sorting
c how to include variables of other c filec strcat uri-beecrowd problem no - 1133 solution in C